"""第 3 课：Lambda 与内置函数结合使用
内置函数：Python 提供的内置函数，不需要导入模块即可直接使用
1) map() 函数：将一个函数应用于一个可迭代对象的每个元素，并返回一个新的可迭代对象
2) filter() 函数：根据指定的条件过滤可迭代对象的元素，并返回一个新的可迭代对象
3) sorted() 函数：对可迭代对象进行排序，并返回一个新的可迭代对象
"""
'''一、map() 函数
map(function, iterable)
- function：一个函数，用于对可迭代对象的每个元素进行操作
- iterable：一个可迭代对象，如列表、元组、字典等
'''
list1 = [1, 2, 3, 4, 5]
#把list1中的每个元素都平方
list2 = list( map (lambda x : x ** 2, list1) )
print("list2 =", list2)
# '''二、filter() 函数'''
list3 = [10, 2, 20, 4, 5]
# 过滤出list3中大于或等于10的元素
'''filter函数的参数说明：
filter(function, iterable)
- function：一个函数，用于过滤元素
- iterable：一个可迭代对象，如列表、元组、字典等'''
list4 = list( filter( lambda x : x>= 10, list3) )
print("list4 =", list4)

'''三、sorted() 函数 
sorted(iterable, key=None, reverse=False)
- iterable：一个可迭代对象，如列表、元组、字典等
- key：一个函数，用于指定排序的规则
- reverse：一个布尔值，用于指定排序的顺序，默认为 False，表示升序
'''
list5 = [10, 2, 20, 4, 5]
#对list5数组从小到大排序
list6 = sorted( list5, key = lambda x : x)
print("排序 =>从小到大：list6 =", list6)
list7 = sorted( list5, key = lambda x : x,reverse=True)
print("排序 =从大到小：list7 =", list7)

'''练习：学生的年龄排序，名称，性别，年龄字段，用字典存储'''
students = [
    {"name": "Tom", "gender": "male", "age": 18},
    {"name": "Jack", "gender": "male", "age": 19},
    {"name": "Lucy", "gender": "female", "age": 17},
    {"name": "Lily", "gender": "female", "age": 18},
    {"name": "Bob", "gender": "male", "age": 19}
]
#按照年龄从大到小排序
new_students = sorted( students, key = lambda x : x["age"], reverse=True)
print("按照年龄从大到小排序：new_students =", new_students)
